<?php
// +-----------------------------------------------------------------------+
// |                                                                       |
// | WebFormsQA     (Question - Answer)                                    |
// | Copyright  (C) 2010                                                   |
// | Official site  www.scale-tech.ru                                      |
// | email          scale-tech@mail.ru                                     |
// | autor          Alexander Demachev                                     |
// |                                                                       |
// | This program is free software; you can redistribute it and/or modify  |
// | it under the terms of the GNU General Public License as published by  |
// | the Free Software Foundation; version 2 of the License.               |
// |                                                                       |
// | This program is distributed in the hope that it will be useful,       |
// | but WITHOUT ANY WARRANTY; without even the implied warranty of        |
// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         |
// | GNU General Public License for more details.                          |
// +-----------------------------------------------------------------------+

// работа с графикой
require_once(GRAPH_DIR.'jpgraph_antispam.php');
require_once(INCLUDES_DIR.'auth.class.php');

/*!
 * @page RegisterPagePage Исходный код класса RegisterPage
 * @include register_page.class.php
 */

/*! @addtogroup ClassWebFormsQA Основные классы проекта
 *  Группа включает основные классы используемые в проекте WebFormsQA
 *  @{
 */


/** 
 * @class RegisterPage
 * @brief страница регистрации нового пользователя \n
 * @ref RegisterPagePage
 */
class RegisterPage extends Page {

    /**
     *  конструктор.
     *  @param object &$smarty_obj   - ссылка на обьект шаблона
     *  @param array  $attr          - массив атрибутов в формате attr["name"] = name_type;
     *  @param string $name_template - название шаблона
     */
    function RegisterPage(&$smarty_obj, $attr, $name_template)
    {
        parent::Page(&$smarty_obj, $attr, $name_template);
    }

    /** 
     * @brief обновить данные страницы
     * 
     *  	   состояние страницы:
     * - 0 - начальное
     * - 1 - пользователь с таким именем уже есть
     * - 2 - пользователь успешно зарегестрирован
     * - 3 - введена неверная строка
     * - 4 - имя администратора указано не верно
     * - 5 - пароль администратора указан не верно
     * - 6 - имя пользователя содержит неправильные символы
	 * 
     * @return bool результат операции
     */
    function update()
    {
        // обновляем атрибуты страницы и их значени
        // и главный шаблон Smarty
        if( $flag_result = parent::update() ) {

            $login  = $pass = $email = "";
            $admin_first = $admin_second = "";
            $admin  	= false;
            $str_admin	= STATEMENT_NO;
            
            $state = 0;

            $this->Smarty->compile_check = true;
            $this->Smarty->clear_compiled_tpl('register.tpl.html');

            // создаем случайную строку и ее изображение
            $antispam   = new AntiSpam();
            $rval       = $antispam->Rand(5);
            
            $name_image = AuthCommon::getNameFile();
            $antispam->Stroke($name_image);
           
            
            if( $this->attr["first"]["set"] ) {
            	$login = $this->attr["first"]["value"];
            	// осуществляю проверку разрешенных символов
				if( !preg_match('/^[a-z0-9]+$/i', $login )) $state = 6;
            }
            
            // пользователь ввел логин и пароль
            if( $state != 6 && $this->attr["first"]["set"] && $this->attr["second"]["set"] ) {

                $login  = $this->attr['first']['value'];
                $pass   = $this->attr['second']['value'];

                if( $this->attr["email"]["set"] )       $email  		= $this->attr['email']['value'];
                if( $this->attr["code"]["set"]  )    	$code   		= $this->attr['code']['value'];
                if( $this->attr["admin_first"]["set"] ) $admin_first  	= $this->attr['admin_first']['value'];
                if( $this->attr["admin_second"]["set"] )$admin_second  	= $this->attr['admin_second']['value'];

                $base = &$GLOBALS["base"];

                if( $admin_first != "" && admin_second != ""  ) {
					// указан административный пароль
					$code_check = AuthCommon::checkAuthAdmin($admin_first, $admin_second);
					if( $code_check == 0 ) {
                		$admin = true;
                		$str_admin	= STATEMENT_YES;  
					} else if( $code_check == 1 ) {
						$state = 4;
					} else if( $code_check == 2 ) {
						$state = 5;		
					} else $state = 5;
                }
                
                $data = compact("login", "pass", "email", "admin");
                if( $state != 4 && $state != 5) {

	                if( isset($_SESSION["code"]) ) {
	                    if( strcasecmp($_SESSION['code'], $code ) ) {
	                        $state = 3;
	                    } elseif( $base->addUser($data, $id) ) {
	                        $state = 2;
	                        // сохраняю данные авторизации
	                        AuthCommon::addAuthSessionInfo($id, $login, $admin, $email);
	                    } else {
	                        $state = 1;
	                    }
	                }
                }
                
            }
            
            if ($state == 2) {
                unset($_SESSION["code"]);
                unlink($name_image);
            } else {
                // сохраняем старое значение
                $_SESSION["code"] 		= $rval;
            }

            // обратная связь для заполнения полей
            $reg_userinfo = array($login, $email, $admin_first, $str_admin);

            // текущая выбранная вкладка
            $this->Smarty->assign('current_tabs', ID_PAGE_REGISTER);
            $this->Smarty->assign("display_entrance", false);
            $this->Smarty->assign("reg_userinfo", $reg_userinfo);
            $this->Smarty->assign("state", $state);
            $this->Smarty->assign("name_image", $name_image);
            // название страницы
            $this->Smarty->assign("name_current_page", PAGE_NAME_REGISTER);

        }
        
        return $flag_result; 
    } // end update()

}  // finish class RegisterPage

/*! @} */

?>
